package com.complex.spring.mvc.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 直接实现javax.servlet.Servlet接口编写Servlet，用来通知访问者服务器的当前时间。
 * 
 * @author Allanlxf(刘新福)
 */

public class TimeServlet implements Servlet {
    private ServletConfig config;

    /**
     * Servlet的初始化方法，由Servlet容器调用。 该方法在Servlet实例被创建后，service方法执行前调用。
     * 
     * @param config ServletConfig类型的对象，包含了当前Servlet的配置及初始化参数。
     *            该对象由服务器创建，传给Servlet实例。
     *@throws ServletException Servlet初始化失败时。
     */

    public void init(ServletConfig config) throws ServletException {
        this.config = config;
    }

    /**
     * Servlet的服务方法，由Servlet容器调用。 当Servlet容器接收到一个来自客户端的请求时，调用该方法。
     * 本类中，该方法输出服务器的当前时间到客户端。
     * 
     * @param request 包含了客户端请求信息的ServletRequest类型的对象。
     * @param response 代表服务器到客户端响应信息的ServletResponse类型的对象。
     * @throws ServletException 当Servlet无法提供服务时。
     * @throws IOException 输入输出错误发生时。
     */
    public void service(ServletRequest request, ServletResponse response) throws ServletException,
            IOException {
        response.setContentType("text/html;charset=gbk");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("  <title>current time of web server</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h3 align=\"center\">Current Time Of The Web Server</h3>");
        out.println("<hr size=\"10\" color=\"#FF0000\">");
        out.println("<center>" + new java.util.Date() + "</center>");
        out.println("</body>");
        out.println("</html>");
    }

    /**
     * Servlet销毁方法，由Servlet容器调用。 该方法在Servlet实例从Servlet容器中卸载之前调用。
     */
    public void destroy() {
    }

    /**
     * 返回包含了当前Servlet的配置及初始化参数的ServletConfig对象。 该对象应该为init方法传入的ervletConfig对象。
     */
    public ServletConfig getServletConfig() {
        return config;
    }

    /**
     * 返回一个代表该Servlet信息的字符串，比如作者，版本等。
     */
    public String getServletInfo() {
        return "TimeServlet By Allanlxf, version1.0";
    }

}
